home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue55 / construc / BASE64.PAS next >
Pascal/Delphi Source File  |  2000-02-07  |  2KB  |  59 lines

  1. unit Base64;
  2. interface
  3.  
  4. function UnBase64(Str: String): String;
  5.  
  6. implementation
  7.  
  8. function UnBase64(Str: String): String;
  9. type
  10.   TTriplet = Array[0..2] of Byte;
  11.   TKwartet = Array[0..3] of Byte;
  12. var
  13.   Kwartet: TKwartet;
  14.   Triplet: TTripLet;
  15.  
  16.   procedure Kwartet2Triplet(Kwartet: TKwartet; var Triplet: TTriplet);
  17.   var
  18.     i: Integer;
  19.   begin
  20.     for i:=0 to 3 do
  21.     begin
  22.       case Chr(Kwartet[i]) of
  23.        'A'..'Z': Kwartet[i] := 0  + Kwartet[i] - Ord('A') + 32;
  24.        'a'..'z': Kwartet[i] := 26 + Kwartet[i] - Ord('a') + 32;
  25.        '0'..'9': Kwartet[i] := 52 + Kwartet[i] - Ord('0') + 32;
  26.             '+': Kwartet[i] := 62 + 32;
  27.             '/': Kwartet[i] := 63 + 32;
  28.       end
  29.     end;
  30.     Triplet[0] :=  ((Kwartet[0] - 32) SHL 2) +
  31.                   (((Kwartet[1] - 32) AND $30) SHR 4);
  32.     Triplet[1] := (((Kwartet[1] - 32) AND $0F) SHL 4) +
  33.                   (((Kwartet[2] - 32) AND $3C) SHR 2);
  34.     Triplet[2] := (((Kwartet[2] - 32) AND $03) SHL 6) +
  35.                    ((Kwartet[3] - 32) AND $3F)
  36.   end {Kwartet2Triplet};
  37.  
  38. var
  39.   i: Integer;
  40. begin
  41.   Result := '';
  42.   while Length(Str) > 4 do
  43.   begin
  44.     for i:=1 to 4 do
  45.       Kwartet[Pred(i)] := Ord(Str[i]);
  46.     Delete(Str,1,4);
  47.     Kwartet2Triplet(Kwartet,Triplet);
  48.     for i:=0 to 2 do Result := Result + Chr(Triplet[i]);
  49.   end;
  50.   for i:=1 to 4 do
  51.     if i <= Length(Str) then
  52.       Kwartet[Pred(i)] := Ord(Str[i])
  53.     else Kwartet[Pred(i)] := Ord('/');
  54.   Kwartet2Triplet(Kwartet,Triplet);
  55.   for i:=0 to 2 do Result := Result + Chr(Triplet[i])
  56. end {Unbase64};
  57.  
  58. end.
  59.